package com.hp.reflect;

//测试类什么时候会初始化
public class TestReflect05 {
    static {
        System.out.println("main类被加载");
    }

    public static void main(String[] args) throws ClassNotFoundException {
        //1、主动引用,创建子类时,先加载的是父类构造初始化;
//        Son son = new Son();
        //2、反射,也是主动引用
//        Class.forName("com.hp.Son");

        //不会发生类的引用的方法   子类去调用父类的静态属性
//        System.out.println(Son.b);

        //创建数组  只有main类被加载，不会触发此类的初始化
//        Son[] array = new Son[5];

        //调用子类的常量，不会触发此类的初始化
        System.out.println(Son.M);

    }
}

//父类
class Father {
    static int b = 2;

    static {
        System.out.println("父类被加载");
    }
}

//子类
class Son extends Father {
    static {
        System.out.println("子类被加载");
        m = 300;
    }

    static int m = 100;
    final static int M = 1;
}
